package com.sky.handler;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import lombok.extern.slf4j.Slf4j;

import java.nio.charset.StandardCharsets;

/**
 * @ChannelHandler.Sharable 为了线程安全
 * SimpleChannelInboundHandler<ByteBuf> 中的ByteBuf可以是String也可以是对象
 */
@ChannelHandler.Sharable
@Slf4j
public class HandlerClientHello extends SimpleChannelInboundHandler<ByteBuf> {

    /**
     * 消息读取方法
     * @param ctx 通道上下文           the {@link ChannelHandlerContext} which this {@link SimpleChannelInboundHandler}
     *                      belongs to
     * @param msg 字节序列，通过ByteBuf操作基础的字节数组和缓冲区，因为JDK原生操作字节麻烦、效率低，所以Netty对字节的操作进行了封装，实现了指数级的性能提升，同时使用更加便利
     * the message to handle
     * @throws Exception
     */
    @Override
    protected void channelRead0(ChannelHandlerContext ctx, ByteBuf msg) throws Exception {
        log.info("接收到的消息：" + msg.toString(StandardCharsets.UTF_8));
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        log.info("接收到的消息：", cause);
        ctx.close();
    }
}
